#include <stdio.h>
#include "fat32.h"
#define SIZE_SECTOR 512

extern unsigned int SECTOR_PER_CLUSTER;

unsigned long offset_data_region;

//ReservedSectorCount + 2*SectoresxFAT+ ((Nº Cluster-2)*SectoresXCluster)
void dcc_calcular_offset_data_region(struct boot_sector_values v_boot_sector)
{
	offset_data_region = v_boot_sector.value_reserved_sector_count + 2* v_boot_sector.value_sectors_per_fat_table-2*SECTOR_PER_CLUSTER;
}

//Recordar que la responsabilidad de hacer free pertenece a quién llama a esta función
char * dcc_leer_un_cluster (unsigned int nro_cluster, FILE *fp)
{
	unsigned int offset;
	char *buff;
	char *buff_sector;
	unsigned int sector;
	//pido memoria para un cluster.
	buff = malloc(SECTOR_PER_CLUSTER*SIZE_SECTOR);
	//Ralizo el cálculo para saber cuanto tengo que mover el puntero
	sector = offset_data_region + nro_cluster * SECTOR_PER_CLUSTER;
	//concateno los sectores para conformar un buffer
	offset = 0;
	//buff_sector = malloc(SIZE_SECTOR);
	int i;
	for (i = 0;i<SECTOR_PER_CLUSTER;i++)
	{
		buff_sector=leer_sector(sector,fp);
		memcpy((buff+offset),buff_sector,SIZE_SECTOR);
		offset = offset + SIZE_SECTOR;
		sector++;
		free(buff_sector);

	}
	buff_sector = NULL;
	return buff;
}

int dcc_escribir_un_cluster (unsigned long nro_cluster,char * cluster, FILE *fp)
{
	unsigned int offset;
	char *buff_sector;
	unsigned long sector;

	//Ralizo el cálculo para saber cuanto tengo que mover el puntero
	sector = offset_data_region + nro_cluster * SECTOR_PER_CLUSTER;

	//concateno los sectores para conformar un buffer
	offset = 0;
	int i;
	buff_sector = malloc(SIZE_SECTOR);
	for (i = 0;i<SECTOR_PER_CLUSTER;i++)
	{
		//printf("\nSector: %d con offset %d", sector, offset);
		memcpy(buff_sector, (cluster+offset),SIZE_SECTOR);
		escribir_sector(sector,fp,buff_sector);
		offset = offset + SIZE_SECTOR;
		sector++;
	}
	free (buff_sector);
	buff_sector = NULL;
	free(cluster);
	cluster = NULL;
	return 0;
}

void dcc_llenar_desde_cluster(char *v_FS_information_sector, char *cluster, unsigned int comienzo , unsigned int largo)
{
	//printf("\nlleno desde %d hasta %d",comienzo,(largo+comienzo));
	memcpy(v_FS_information_sector, cluster+comienzo,largo);
	/*unsigned long long i;
	for (i = comienzo; i<(largo + comienzo);i++)
	{
		//putchar(cluster[i]);
		v_FS_information_sector[i-comienzo] = cluster[i];
	}*/
}
